/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.apache.skywalking.oap.server.core.storage;

import org.apache.skywalking.oap.server.library.module.Service;

/**
 * @author peng-yongsheng
 *
 * SkyWalking OAP 也提供了DAO 层抽象，如图所示，大致可以分为三类：Receiver DAO、Cache DAO、Query DAO。
 * 《SkyWalking OAP DAO层抽象.png》
 * - Receiver DAO 接口：在各个 receiver 模块接收到 Agent 上报的 Metrics 数据、Trace 数据以及注册请求的时候，会通过 Receiver DAO 将数据持久化到底层存储，具体的接口如下图所示：
 *   - IRegisterDAO：负责增删改查 RegisterSource 数据。
 *   - IMetricsDAO 接口：负责增删改查 Metrics 数据。
 *   - IRecordDAO 接口：负责增删改查 Record 数据。
 *   - IBatchDAO 接口：上述接口都是单条数据的操作接口，IBatchDAO 接口提供了批量写入的功能。
 *   - IRegisterLockDAO 接口：在处理 RegisterSource 数据的时候，需要维护一把全局的锁，这样才能保证写入生成的 ID 全局唯一。IRegisterLockDAO 接口的实现就提供了全局锁的功能。
 *   - Cache DAO 接口：在稳定集群中，RegisterSource 类型数据基本不会变化，这里的 Cache DAO 接口主要提供了 RegisterSource 数据的查询，相较于 IRegisterDAO，Cache DAO 的接口提供了更多维度的查询方式。
 *   - Query DAO 接口：Query DAO 接口负责支撑 query 模块处理 SkyWalking Rocketbot 发来的查询请求，接口参数更加贴近用户请求参数。下图展示了所有 Query DAO 接口，从接口名称即可看出查询的是哪些数据。
 */
public interface DAO extends Service {
}
